home *** CD-ROM | disk | FTP | other *** search
/ Aminet 4 / Aminet 4 - November 1994.iso / aminet / dev / c / restracklib_0_2.lha / ResTrackLib / locks.c < prev    next >
C/C++ Source or Header  |  1994-07-31  |  2KB  |  113 lines

  1. /* lock.c */
  2.  
  3. #include <stdio.h>
  4. #include <dos/dos.h>
  5. #include <clib/dos_protos.h>
  6. #ifdef REGARGS
  7. #   include <pragmas/dos_pragmas.h>
  8.  
  9. extern struct Library * DOSBase;
  10. #endif
  11.  
  12. #include "restrack_intern.h"
  13.  
  14.  
  15. BPTR __rtl_Lock (STRPTR name, long type, const char * file, int line)
  16. {
  17.     BPTR lock;
  18.  
  19.     if ( (lock = Lock (name, type)) )
  20.     CHECK_ADD_RN(RTL_DOS,RTLRT_Lock,lock,0);
  21.  
  22.     return (lock);
  23. } /* __rtl_Lock */
  24.  
  25.  
  26. BPTR __rtl_CreateDir (STRPTR name, const char * file, int line)
  27. {
  28.     BPTR dir;
  29.  
  30.     if ( (dir = CreateDir (name)) )
  31.     CHECK_ADD_RN(RTL_DOS,RTLRT_Lock,dir,0);
  32.  
  33.     return (dir);
  34. } /* __rtl_CreateDir */
  35.  
  36.  
  37. BPTR __rtl_CurrentDir (BPTR new, const char * file, int line)
  38. {
  39.     BPTR old;
  40.  
  41.     if ( (old = CurrentDir (new)) )
  42.     {
  43.     ResourceNode * node;
  44.  
  45.     if ((node = FindResourceNode1 ((APTR)new)) )
  46.     {
  47.         if (node->Resource != RTLRT_Lock)
  48.         {
  49.         fprintf (stderr, "ERROR: Using this at %s:%d as a lock:\n",
  50.             file, line);
  51.         PrintResourceNode (node);
  52.         }
  53.         else
  54.         {
  55.         /* this is not our responsibility anymore, so we can
  56.             simply change the node */
  57.         if (ResourceTrackingLevel > 0 && (ResourcesToTrack & RTL_DOS))
  58.             node->Ptr = (APTR)old;
  59.         else
  60.             RemoveResourceNode (node);  /* otherwise free the node */
  61.         }
  62.     }
  63.     else if (DO_RT(RTL_DOS))
  64.         AddResourceNode (file, line, RTLRT_Lock, (APTR)old, 0);
  65.     }
  66.  
  67.     return (old);
  68. } /* __rtl_CurrentDir */
  69.  
  70.  
  71. BPTR __rtl_DupLock (BPTR lock, const char * file, int line)
  72. {
  73.     BPTR new;
  74.     ResourceNode * node;
  75.  
  76.     if ((node = FindResourceNode1 ((APTR)lock)) )
  77.     {
  78.     if (node->Resource != RTLRT_Lock)
  79.     {
  80.         fprintf (stderr, "ERROR: DupLock at %s:%d called for\n",
  81.             file, line);
  82.         PrintResourceNode (node);
  83.     }
  84.     else
  85.     {
  86.         if ( (new = DupLock (lock)) && DO_RT(RTL_DOS))
  87.         AddResourceNode (file, line, RTLRT_Lock, (APTR)new, 0);
  88.     }
  89.     }
  90.     else
  91.     CHECK_RT_ERROR_OR_CALL(RTL_DOS,DupLock,"(%p)",lock,new = DupLock (lock))
  92.  
  93.     return (new);
  94. } /* __rtl_DupLock */
  95.  
  96.  
  97. void __rtl_UnLock (BPTR lock, const char * file, int line)
  98. {
  99.     ResourceNode * node;
  100.  
  101.     CHECK_REM_RN(lock,RTLRT_Lock,UnLock,UnLock(lock),RTL_DOS,"(%p)",lock)
  102.  
  103. } /* __rtl_UnLock */
  104.  
  105.  
  106. NRT(UnLock,(BPTR lock),(lock))
  107. NRT_RET(BPTR,DupLock,(BPTR lock),(lock))
  108. NRT_RET(BPTR,CurrentDir,(BPTR lock),(lock))
  109. NRT_RET(BPTR,CreateDir,(STRPTR name),(name))
  110.  
  111.  
  112. /* END lock.c */
  113.